The present invention relates generally to systems and methods for transmitting data. More particularly, the present invention relates to intelligent and flexible techniques for memory design and allocation of video data during transmission.
Communication channels deliver bit streams carrying video, audio and/or general data. A network device that transmits data through the channels is typically responsible for processing dozens or hundreds of bit streams simultaneously.
The data is often transmitted in real-time. This implies that all of the information must be delivered in a timely manner. For example, transmission of video data is often intended for real-time playback. This implies that all of the information required to represent digital pictures in the video must be delivered and displayed under time constraints according to the real-time playback.
Network devices that communicate data are frequently required to temporarily store data during transmission. This may be done to allow parallel processing related to routing protocol, or to allow data manipulation such as bit rate shaping to allow the output bit stream to fit within an output channel. To accommodate any processes that may occur before data transmission, conventional network devices typically comprise internal memory dedicated to temporary storage. How memory is allocated and how incoming data is assigned into the memory affects the amount of memory needed for a network device.
Static memory used by a network device gives each data for each channel a set amount of memory space for storage. This constant and predetermined memory space size is established conservatively to account for all possible data demands in a particular channel. For static allocation to work, the static allocation must allocate for the worst case. Since the majority of bit streams being processed are much smaller than this conservative estimation, static memory schemes usually result in excessive memory allotment. This increases network device costs. In a digital video broadcast where hundreds of bit streams are transmitted, the extra cost may add up significantly.
Dynamic memory allocation schemes flexibly distribute memory space to various channels on-the-fly. More specifically, the size of memory space given to an incoming bit stream is calculated based on the bit stream rate. One problem with this approach is that channels are frequently flipped on and off, which requires memory dedicated to a channel to be allocated and freed accordingly. Most memory operates more efficiently when contiguous. If the available memory space is scattered (memory fragmentation) to accommodate multiple bit streams, memory operations become less efficient. Even worse, memory fragmentation may result in a system not-operational due to the fact that no more contiguous memory is large enough in size to accommodate a newly established channel. Various collection techniques are used to collect data stored throughout the memory. For example, ‘garbage collection’ is a technique used to rearrange disparate memory portions to obtain a contiguous memory arrangement. Collation techniques such as garbage collection are difficult to implement in real-time. The reason is that once a channel occupies a block of memory, it is hard to reassign the channel to a different memory location without causing disruption to the real time channel data transmission.
Based on the foregoing there is a need for improved systems and methods to temporarily store data during transmission.